package mensagem;

import java.util.ArrayList;
import java.util.List;

import excecoes.MensagemException;

/**
 * Classe que simula uma mensagem de texto.
 * 
 * @author Adalberto Teixeira
 * @author Andrey Menezes
 * @author Laise Florentino
 * @author Laio Francis
 * 
 */
public class MensagemTexto implements Mensagem {

	private String tipo;
	private String texto;
	private String remetente;
	private String destinatario;

	/**
	 * Construtor de MensagemTexto.
	 * 
	 * @param tipo
	 * @param texto
	 * @param remetente
	 * @param destinatario
	 * 
	 * @throws MensagemException 
	 */
	public MensagemTexto(String tipo, String remetente, String destinatario,
			String texto) throws MensagemException {
		setTipo(tipo);
		setTexto(texto);
		setRemetente(remetente);
		setDestinatario(destinatario);
	}
	
	
	
	// =-=-=-=-=-=
	// metodos get
	// =-=-=-=-=-=
	
	/**
	 * Retorna o destinatario da mensagem.
	 * 
	 * @return destinatario
	 */
	public String getDestinatario() {
		return this.destinatario;
	}

	/**
	 * Retorna o remetente da mensagem.
	 * 
	 * @return remetente
	 */
	public String getRemetente() {
		return this.remetente;
	}

	/**
	 * Retorna o texto da mensagem.
	 * 
	 * @return texto
	 */
	public String getTexto() {
		return this.texto;
	}

	/**
	 * Retorna o tipo de mensagem.
	 * 
	 * @return tipo
	 */
	public String getTipo() {
		return this.tipo;
	}

	
	
	// =-=-=-=-=-=
	// metodos set
	// =-=-=-=-=-=

	/**
	 * Altera o texto da mensagem.
	 * 
	 * @param texto O novo texto da mensagem
	 * 
	 * @throws MensagemException
	 *                caso seja nulo
	 */
	public void setTexto(String texto) throws MensagemException {
		if (texto.equals(null))
			throw new MensagemException("texto Mensagem invalido");
		this.texto = texto;
	}

	/**
	 * Altera o tipo de mensagem.
	 * 
	 * @param tipo O novo tipo de mensagem.
	 * 
	 * @throws MensagemException
	 *             caso nao seja uma das opcoes de tipos de mensagem
	 */
	public void setTipo(String tipo) throws MensagemException {
		// nulo
		if (tipo.equals(null))
			throw new MensagemException("tipo Mensagem invalido");
		// tipos desconhecidos
		List<String> tiposValidosMensagem = new ArrayList<String>();
		for (int i = 0; i < Mensagem.tiposMensagem.length; i++)
			tiposValidosMensagem.add(Mensagem.tiposMensagem[i]);
		if (!tiposValidosMensagem.contains(tipo))
			throw new MensagemException("tipo Mensagem invalido");

		this.tipo = tipo;
	}

	/**
	 * Altera o destinatario da mensagem.
	 * 
	 * @param destinatario O novo destinatario da mensagem
	 * 
	 * @throws MensagemException
	 *                caso seja nulo ou vazio
	 */
	public void setDestinatario(String destinatario) throws MensagemException {
		if (destinatario.equals(null) || destinatario.equalsIgnoreCase(""))
			throw new MensagemException("destinatario Mensagem invalido");
		this.destinatario = destinatario;
	}

	/**
	 * Altera o remetente da mensagem.
	 * 
	 * @param remetente O novo remetente da mensagem
	 * 
	 * @throws MensagemException
	 *                caso seja nulo ou vazio
	 */
	public void setRemetente(String remetente) throws MensagemException {
		if (remetente.equals(null) || remetente.equalsIgnoreCase(""))
			throw new MensagemException("remetente Mensagem invalido");
		this.remetente = remetente;
	}
}
